package com.qiku.reggie.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qiku.reggie.common.R;
import com.qiku.reggie.dto.DishDto;
import com.qiku.reggie.pojo.Category;
import com.qiku.reggie.pojo.Dish;
import com.qiku.reggie.service.CategoryService;
import com.qiku.reggie.service.DishService;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;

@RestController
@RequestMapping("/dish")
public class DishController {

    @Autowired
    private DishService dishService;

    @Autowired
    private CategoryService categoryService;

    /**
     * 新增菜品
     */
    @PostMapping
    public R<String> save(@RequestBody DishDto dishDto){
        dishService.saveWithDishFlavor(dishDto);
        return R.success("添加成功");
    }


    /**
     * 分页条件查询
     */
    @GetMapping("/page")
    public R<Page<DishDto>> page(Integer page , Integer pageSize , String name){
        // 构造分页对象
        Page<Dish> pageInfo1 = new Page<>(page , pageSize);
        // 构造条件对象
        QueryWrapper<Dish> queryWrapper = new QueryWrapper<>();
        queryWrapper.like(StringUtils.isNotBlank(name) , "name" , name);
        queryWrapper.orderByAsc("sort").orderByDesc("update_time");

        dishService.page(pageInfo1 , queryWrapper);

        // 对  pageInfo 做数据处理
        Page<DishDto> pageInfo2 = new Page<>(page , pageSize);

        // 将 pageInfo1 中的数据拷贝到 pageInfo2 中  (分为两个阶段 List  Total)
        // List数据需要处理   ignoreProperties 除了 records 数据别的都拷贝
        BeanUtils.copyProperties(pageInfo1 , pageInfo2 , "records");

        // 将page1中的List<Dish>集合转为 List<DishDto>
        ArrayList<DishDto> DishDtolist = new ArrayList<>();

        // 遍历page1中的list集合
        for (Dish dish : pageInfo1.getRecords()){
            // 将Dish 转变为 DishDto
            DishDto dishDto = new DishDto();
            BeanUtils.copyProperties(dish , dishDto);
            // 处理分类名称
            Category category = categoryService.getById(dishDto.getCategoryId());
            dishDto.setCategoryName(category.getName());
            DishDtolist.add(dishDto);
        }

        pageInfo2.setRecords(DishDtolist);

        return R.success(pageInfo2);
    }


    /**
     * 根据id查询菜品信息
     */
    @GetMapping("{id}")
    public R<DishDto> findById(@PathVariable Long id){
        DishDto dishDto = dishService.getByIdWithFlavor(id);
        return R.success(dishDto);
    }


    /**
     * 更新改菜品
     */
    @PutMapping
    public R<String> update(@RequestBody DishDto dishDto){
        dishService.updateByIdWithFlavo(dishDto);
        return R.success("成功");
    }

}
